package Day024_枚举_正则表达式.demo2_方法引用;

/**
 * @author zhangyan
 * @date 2020/5/18 9:43
 */
/*
    方法引用使得开发者可以直接引用现存的方法、Java类的构造方法或者实例对象。方法引用和Lambda表达式配合使用，
    使得java类的构造方法看起来紧凑而简洁，没有很多复杂的模板代码

    方法引用使用一对冒号 ::    一定情况下可以替换Lambda表达式
    Lambda表达式大括号内的代码和另一个方法中的代码一模一样,那么就可以用方法引用把该方法引用过来
    Lambda表达式大括号内的代码就是调用另一个方法,那么就可以用方法引用把该方法引用过来
 */

public class Test1_方法引用 {
    public static void main(String[] args) {

        //举例
        //1. 通过Runnable函数式接口传入任务
        new Thread(new Runnable() {
            @Override
            public void run() {
                //任务
                System.out.println(1);
                System.out.println(2);
            }
        }).start();

        //2. Lambda表达式 ()->{}
        new Thread(()->{
            //任务
            System.out.println(1);
            System.out.println(2);
        }).start();

        //场景1. Lambda表达式大括号内的代码和另一个方法中的代码一模一样,那么就可以用方法引用把该方法引用过来
        new Thread(Test1_方法引用::print).start();

        //场景2. 假设Lambda表达式是下面的形式(Lambda表达式大括号内的代码就是调用另一个方法,那么就可以用方法引用把该方法引用过来)
        new Thread(()->Test1_方法引用.print()).start();

        new Thread(Test1_方法引用::print).start();

    }

    //假设有一个print方法,方法中的代码和Lambda表达式中执行代码一模一样
    public static void print() {
        System.out.println(1);
        System.out.println(2);
    }
}
